From: Arjan Molenaar Date: Sat, 3 Dec 2022 23:05:39 +0000 (+0100) Subject: macos: Explicitly ungrab seat when drag is done or finalized X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~116^2^2~79^2~2 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=d0c44130337197eba5306cf976ae1ee8559797e9;p=gtk4.git macos: Explicitly ungrab seat when drag is done or finalized This is an extra safeguard that avoids grabbing resources longer than nessecary. It also ensures the resource is removed from the drag, so it is not freed again. --- diff --git a/gdk/macos/gdkmacosdrag.c b/gdk/macos/gdkmacosdrag.c index b7d9726798..34e8be9874 100644 --- a/gdk/macos/gdkmacosdrag.c +++ b/gdk/macos/gdkmacosdrag.c @@ -218,6 +218,12 @@ drag_ungrab (GdkMacosDrag *self) g_assert (GDK_IS_MACOS_DRAG (self)); + if (self->drag_seat) + { + gdk_seat_ungrab (self->drag_seat); + g_clear_object(&self->drag_seat); + } + display = gdk_drag_get_display (GDK_DRAG (self)); _gdk_macos_display_break_all_grabs (GDK_MACOS_DISPLAY (display), GDK_CURRENT_TIME); } @@ -536,7 +542,11 @@ gdk_macos_drag_finalize (GObject *object) GdkMacosDragSurface *drag_surface = g_steal_pointer (&self->drag_surface); g_clear_object (&self->cursor); - g_clear_object (&self->drag_seat); + if (self->drag_seat) + { + gdk_seat_ungrab (self->drag_seat); + g_clear_object (&self->drag_seat); + } G_OBJECT_CLASS (gdk_macos_drag_parent_class)->finalize (object);